package lib

func init() {
	Probs = append(Probs, Problem{
		Num:         36,
		Discription: "有效的数独",
		Level:       2,
		Labels: map[string]int{
			"哈希表": 1,
		},
	})
}

// IsValidSudoku 用三个哈希表表示三个规则中每个数字的出现次数
//  @param board
//  @return bool
func IsValidSudoku(board [][]byte) bool {
	var columns [9][9]int
	var rows [9][9]int
	var subAreas [3][3][9]int

	for i := 0; i < len(board[0]); i++ {
		for j := 0; j < len(board); j++ {
			if board[i][j] == '.' {
				continue
			}

			num := board[i][j] - '1'
			columns[i][num]++
			if columns[i][num] > 1 {
				return false
			}
			rows[j][num]++
			if rows[j][num] > 1 {
				return false
			}
			subAreas[i/3][j/3][num]++
			if subAreas[i/3][j/3][num] > 1 {
				return false
			}
		}
	}

	return true
}
